package org.groupg.demo.eclipse;
import org.eclipse.collections.api.bag.MutableBag;
import org.eclipse.collections.api.list.MutableList;
import org.eclipse.collections.api.map.MutableMap;
import org.eclipse.collections.api.set.MutableSet;
import org.eclipse.collections.impl.factory.Bags;
import org.eclipse.collections.impl.factory.Lists;
import org.eclipse.collections.impl.factory.Maps;
import org.eclipse.collections.impl.factory.Sets;

/**
 * 可变集合示例
 *
 * 特点：
 * 1. 创建后可修改内容（添加/删除元素）
 * 2. 所有操作直接修改原集合
 * 3. 不提供线程安全保证
 * 4. 性能优于不可变集合
 */
public class MutableCollectionsExample {
    public static void main(String[] args) {
        // 创建可变List - 类似ArrayList，但提供更丰富的API
        MutableList<String> mutableList = Lists.mutable.of("Apple", "Banana");
        mutableList.add("Cherry"); // 添加元素
        mutableList.remove("Banana"); // 删除元素
        System.out.println("Mutable List: " + mutableList);

        // 创建可变Set - 类似HashSet，元素唯一
        MutableSet<Integer> mutableSet = Sets.mutable.of(1, 2, 3);
        mutableSet.add(4);
        mutableSet.remove(1); // 删除元素
        System.out.println("Mutable Set: " + mutableSet);

        // 创建可变Map - 类似HashMap，键值对存储
        MutableMap<String, Integer> mutableMap = Maps.mutable.of("Key1", 100, "Key2", 200);
        mutableMap.put("Key3", 300); // 添加键值对
        mutableMap.remove("Key1"); // 删除键值对
        System.out.println("Mutable Map: " + mutableMap);

        // 创建可变Bag - 允许重复元素，可统计元素出现次数
        MutableBag<String> mutableBag = Bags.mutable.of("Apple", "Apple", "Banana");
        mutableBag.add("Cherry");
        mutableBag.add("Apple"); // 添加重复元素
        mutableBag.remove("Banana"); // 删除元素
        System.out.println("Mutable Bag: " + mutableBag);
        System.out.println("Apple出现次数: " + mutableBag.occurrencesOf("Apple"));
    }
}